import 'dart:async';

import 'package:aio/aio.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:app/generated/app_strings.dart';
import 'package:app/src/config/app_data_config.dart';
import 'package:app/src/ui/app_ui.dart';
import 'package:app/src/http/bean/user.dart';
import 'package:app/src/http/model/app_model.dart';
import 'package:app/src/http/model/user_model.dart';
import 'package:app/src/manager/user_manager.dart';
import 'package:app/src/ui/dialog/dailog.dart';
import 'package:app/src/utils/image_path_utils.dart';
import '../../../../app_plugin.dart';
import '../../helper/route_helper.dart';
import '../../user/password.dart';

///用户
class UserPage extends StatefulWidget {
  @override
  _UserPageState createState() => _UserPageState();
}

class _UserPageState extends State<UserPage> {
  var itemColor = Colors.white;

  UserPresenter prensenter = UserPresenter();

  String? brand = null;

  @override
  void initState() {
    prensenter?.__userPageState = this;
    //获取用户信息
    UserPresenter?.getpersoninfo(context, (value) {
      if(mounted){
        setState(() {});
      }
    });
    AppUtils.getDeviceInfoWithBrand()?.then((value) {
      if(mounted){
        setState(() {
          brand = value.toLowerCase().trim();
        });
      }
    });
  }

  var huawei = "huawei";

  ///判断是否为华为手机
  bool isHuawei() {
    if ("huawei" == brand) {
      return true;
    } else if (brand != null && brand!.contains(huawei)) {
      return true;
    }
    return false;
  }

  @override
  Widget build(BuildContext context) {
    return _body(context);
  }

  Widget _body(BuildContext context) {
    return Stack(
      children: [
        Container(
          color: AppColors.backgroundColorWithGrey,
          child: ListView(
            //padding: AppUi.paddingWithItem(left:0,top: 0,right: 0,bottom: 0),
            physics: BouncingScrollPhysics(),
            children: [
              //头像
              Container(
                padding: AppEdgeInsets.paddingWithItem(top: 0),
                alignment: Alignment.centerLeft,
                height: 200 - px.statusBarHeight(),
                color: itemColor,
                child: Row(
                  children: [
                    InkWell(
                      child: Card(
                        child: Builder(
                          builder: (context) {
                            var imageUrl = UserManager.getUserInfo()
                                ?.getPersonPictureUrl();
                            var imagePath = ImagePathUtils.getImageLogo();
                            return FImage(
                              imageUrl,
                              placeholder: imagePath,
                              width: 90,
                              height: 90,
                              fit: BoxFit.cover,
                              isCache: true,
                            );
                          },
                        ),
                        shadowColor: Colors.blue,
                        //阴影颜色
                        elevation: 5,
                        //阴影长度
                        shape: RoundedRectangleBorder(
                            borderRadius:
                                BorderRadius.all(Radius.circular(90))),
                        //RoundedRectangleBorder圆角矩形边框
                        clipBehavior: Clip
                            .antiAlias, // Clip.antiAlias 圆角具备切割能力;Clip.none圆角不具备切割能力。
                      ),
                      onTap: () {
                        prensenter?.chooseHead(context);
                      },
                    ),
                    SizedBox(
                      width: 20,
                    ),
                    Text(
                      '${AppDataConfig.getFactory()?.FactoryName}：\n${UserManager.getUserInfo()?.PersonName},${AppStrings.of(context).welcome}!',
                      style: AppStyle.textStyleWithTitle(),
                    ),
                  ],
                ),
              ),
              SizedBox(
                height: 10,
              ),
              AppUi.addItem(AppStrings.of(context).changePassword, () {
                //修改密码
                AppRouteHelper.goPassWordRoute(context);
              }),
              AppUi.addItem(AppStrings.of(context).serverAddress, () {
                //服务器地址
                AppRouteHelper.goSerVerAddressRoute(context);
              }),

              ///版本号
              FutureProvider(
                initialData: null,
                create: (context) {
                  return AppUtils.getPackageInfo();
                },
                child: Builder(
                  builder: (context) {
                    final value = context.watch<
                        PackageInfo?>(); //Provider 里的context才具备.watch()方法。获取create()方法的返回值。
                    var version = value?.version;
                    if (version == null) {
                      version = "";
                    }
                    if (isHuawei()) {
                      version = version +
                          "\n" +
                          AppStrings.of(context)
                              .Puremode; //fixme 华为手机更新，需要关闭纯净模式。
                    }
                    return AppUi.addItem(
                        AppStrings.of(context).versionUpdate + "\t ${version}",
                        () {
                      //版本更新
                      prensenter.checkUpdate(context, true);
                    });
                  },
                ),
              ),
              SizedBox(
                height: 10,
              ),

              ///退出登录
              Material(
                color: AppColors.backgroundColorWithWhite,
                child: InkWell(
                  // splashColor: Colors.red,
                  // highlightColor: Colors.red,
                  child: Container(
                    height: 45,
                    //color: Colors.white,
                    child: Center(
                      child: Text(
                        AppStrings.of(context).logOut,
                        style: AppStyle.textStyleWithTitleRed(),
                      ),
                    ),
                  ),
                  onTap: () {
                    //退出登录
                    AppDialog.showDialogWithAlert(context,
                            content: AppStrings.of(context).doLogout,
                            isOk: false)
                        ?.then((value) {
                      if (BoolUtils.isBool(value)) {
                        UserManager.loginOut(context, true);
                      }
                    });
                  },
                ),
              )
            ],
          ),
        ),
      ],
    );
  }
}

class UserPresenter {
  _UserPageState? __userPageState;

  ///获取用户信息
  ///isAuto 是否自动跳转 手机验证和修改密码页
  ///isAutoLogin 是否自动跳转到登陆页面
  ///isEnableLoad 是否开启进度条
  ///callback 回调函数，有用户信息时，才回调。没有用户信息时，不会回调，会自动跳转到登陆页面。
  static void getpersoninfo(
      BuildContext context, ResponseCallbackWithT_<UserInfo> callback,
      {bool isAuto = true,
      bool isAutoLogin = true,
      bool isEnableLoad = false}) {
    //判断用户是否登录
    if (UserManager.getUserInfo() != null) {
      // print("===================================开始获取用户信息");
      // Toast.showInfo("开始获取用户信息", context);
      //实时获取用户最新信息
      UserModel.getpersoninfo(context, isEnableLoad, (value) {
        // print(
        //     "===================================获取用户信息是否成功：${value.isSuccessForData()}\t${value?.MsgDetail}\tisAuto:${isAuto}:\tcontext:${context}\t是否跳转密码页：${AppDataConfig.isValidationWithPassword()}\t密码页是否显示：${PassWordRoute.isShow}\t是否快速跳转：\t${LibRouteHelper.isFastGo()}");
        // Toast.showInfo("跳：${AppDataConfig.isValidationWithPassword()}\t显示：${PassWordRoute.isShow}\t快：\t${LibRouteHelper.getFastGoTime()}", context);
        //fixme 密码跳转已经设置成了允许快速跳转。之前在首页没有自动跳转到密码修改页，就是因为这个快速跳转的问题。才没有跳。
        if (value.isSuccessForData()) {
          //信息获取成功
          UserManager.setUserInfo(value.Data);
          callback?.call(value.Data);
          AppRouteHelper.isValidation(context, isAuto: isAuto); //fixme 验证
          // //fixme 判断手机号是否验证
          // if (!AppDataConfig.isValidation()) {
          //   //fixme 跳转到手机验证码验证界面。
          //   AppRouteHelper.goSmsMobileRoute(context);
          // } else {
          //   if (AppDataConfig.isValidationWithPassword()) {
          //     //fixme 跳转到密码修改
          //     AppRouteHelper.goPassWordRoute(context);
          //     return;
          //   }
          // }
          // print(
          //     '获取用户头像：${UserManager.getUserInfo()?.getPersonPictureUrl()?.toString()}');
        } else {
          if (isAutoLogin) {
            String MsgDetail = value?.MsgDetail ?? "";
            AppDialog.showDialogWithInfo(context, content: value?.MsgDetail)
                ?.then((value) {
              print(
                  "=======================================================object:$MsgDetail");
              if (value) {
                //用户信息已过期，请重新登录
                //print("=======================================$MsgDetail");
                // if (MsgDetail.contains("请重新登录")||MsgDetail.contains("用户身份不合法")) {
                //   //跳转登录页面
                //   AppRouteHelper.goLoginRoute(context, false);
                // }else if(MsgDetail.contains("签名错误")){
                //   //服务器地址
                //   AppRouteHelper.goSerVerAddressRoute(context);
                // }
                if (MsgDetail.contains("签名错误")) {
                  //服务器地址
                  AppRouteHelper.goSerVerAddressRoute(context);
                } else {
                  //除了签名错误，其他的所有错误都调整到登陆页面。
                  //跳转登录页面
                  AppRouteHelper.goLoginRoute(context, false);
                }
              }
            });
          }
        }
      });
    } else {
      //跳转登录页面
      if (isAutoLogin) {
        AppRouteHelper.goLoginRoute(context, false);
      }
    }
  }

  ///头像选择
  void chooseHead(BuildContext context) {
    AppDialog.showDialogWithPickerPhoto(context, (value) {
      // print("================图片选择：${value?.path}");
      // ================图片选择：/data/user/0/cn.nbjianghua.bwg.app/cache/compress/img_1715232089162.jpg
      // 图片选择：/data/user/0/cn.nbjianghua.bwg.app/cache/3ac56de9-4336-49f7-a321-0388d5ce4f09/IMG_20230810_115736.heic //这个格式的图片，会上传失败，服务器不支持。
      //用户头像上传
      UserModel.syspicupload(context, true, FileUtils.getFilesWithFile(value),
          (value) {
        if (value?.Data != null) {
          UserManager.getUserInfo()?.PersonPicture = value.Data!;
          //修改用户信息
          UserModel.setpersoninfo(context, true, UserManager.getUserInfo(),
              (value) {
            if (value.isSuccessForCode()) {
              //刷新页面
              __userPageState?.setState(() {});
            } else {
              AppDialog.showDialogWithInfo(context, content: value?.MsgDetail);
            }
          });
        }
      });
    }, headPath: UserManager.getUserInfo()?.getPersonPictureUrl());
  }

  ///版本更新
  void checkUpdate(BuildContext context, bool isEnableLoad) {
    AppModel.checkUpdate(context, isEnableLoad);
  }
}
